/*******************************************************************************
  * 文件：TM1629B.h
  * 作者：djy
  * 版本：v1.0.0
  * 日期：2020.05.29
  * 说明：TM1629B驱动程序，仅提供MCU与TM1629芯片的读写驱动，实际显示与按键与硬件
  * 原理图有关。
*******************************************************************************/
#ifndef _TM1629B_H
#define _TM1629B_H

/* 头文件 *********************************************************************/
#include "Typedefine.h"
#include "Constant.h"
#include "Macro.h"
#include "Hardware.h"
#include "r_cg_macrodriver.h"

/* 宏定义 *********************************************************************/
#define TM1629_IO_DIO       	P6_bit.no0
#define TM1629_IO_CLK       	P6_bit.no1
#define TM1629_IO_STB       	P6_bit.no2
#define TM1629_DELAY_US(x)  	Hardware_DelayUs(x)
#define TM1629_SET_DIO_IN() 	PM6_bit.no0 = 1
#define TM1629_SET_DIO_OUT()	PM6_bit.no0 = 0

/* 类型定义 *******************************************************************/
typedef enum
{
    eBRIGHT_LEVEL_0 = 0x00,
    eBRIGHT_LEVEL_1 = 0x01,
    eBRIGHT_LEVEL_2 = 0x02,
    eBRIGHT_LEVEL_3 = 0x03,
    eBRIGHT_LEVEL_4 = 0x04,
    eBRIGHT_LEVEL_5 = 0x05,
    eBRIGHT_LEVEL_6 = 0x06,
    eBRIGHT_LEVEL_7 = 0x07,
}TM1629Bright_te;// LED亮度等级 

typedef struct
{
    U8 bBit0    : 1;    // 预留
    U8 bBit1    : 1;    // 预留
    U8 bBit2    : 1;    // KS1/3/5/7 对应的K1位
    U8 bBit3    : 1;    // KS1/3/5/7 对应的K0位
    U8 bBit4    : 1;    // 预留
    U8 bBit5    : 1;    // 预留
    U8 bBit6    : 1;    // KS2/4/6/8 对应的K1位
    U8 bBit7    : 1;    // KS2/4/6/8 对应的K0位
}TM1629KeyByte_ts; // KeyByte的bit格式（具体参照Datasheet）

typedef union
{
    TM1629KeyByte_ts sKeyByte;
    U8               u8KeyByte;
}TM1629KeyByte_tu;// KeyByte共用体

typedef struct
{
	TM1629KeyByte_tu uByte1;
	TM1629KeyByte_tu uByte2;
	TM1629KeyByte_tu uByte3;
	TM1629KeyByte_tu uByte4;
}TM1629KeyData_ts;// TM1629按键寄存器数据
/* 变量声明 *******************************************************************/
/* 函数声明 *******************************************************************/
TM1629KeyData_ts TM1629_ReadKeyData(void);	// 读取TM1629按键寄存器数据
void TM1629_SetBright(TM1629Bright_te eTM1629Bright); // 设置TM1629亮度等级
void TM1629_WriteDisplayBytes(U8 u8RegAddr,U8 *pu8DataAddr,U8 u8Len);  // 连续写入显示寄存器数据
void TM1629_WriteDisplayByte(U8 u8RegAddr,U8 u8Data);  // 写入显示寄存器一个字节
void TM1629_Init(void); 

#endif /* _TM1629B_H */

/***************************** 文件结束 ***************************************/
